package hangxingliu.java.yddictapi;

/**
 * 有道查词类查询结果类
 * 
 * @author VoyageLiu
 * @version 2.0
 */
public final class YdDictResponse {

	/**
	 * 查询出现的错误,null表示无错误
	 */
	private String errorStr = null;
	/**
	 * 数据块类别
	 */
	private String[] blockName = null;
	/**
	 * 数据块文本内容
	 */
	private String[] blockData = null;
	/**
	 * 数据块HTML内容
	 */
	private String[] blockHTMLData = null;
	/**
	 * 数据块长度
	 */
	private int blockLength = 0;
	/**
	 * 查看数据时正在看的数据块
	 */
	private int queryBlock = 0;
	
	/**
	 * 构建一个有道词典查询出错类
	 * @param errorString 出错信息
	 */
	public YdDictResponse(String errorString){
		this.errorStr = errorString;
	}
	
	/**
	 * 构建一个有道词典查询结果类
	 * @param blockName 数据块类别数组
	 * @param blockData 数据块文本数据数组
	 * @param blockHTMLData 数据块HTML数据数组
	 * @param blockLength 数据块个数
	 */
	public YdDictResponse(String[] blockName,String[] blockData,
			String[] blockHTMLData,int blockLength){
		this.blockData = blockData;
		this.blockName = blockName;
		this.blockHTMLData = blockHTMLData;
		this.blockLength = blockLength;
	}
	
	/**
	 * 将查看数据的指针指到第一个数据块
	 * @return 是否成功(失败原因:数据块个数为0)
	 */
	public boolean queryToHead(){
		//数据块长度为0
		if(blockLength == 0){
			return false;
		}
		//数据块为空
		if(blockName == null || blockData == null || blockHTMLData == null){
			return false;
		}
		queryBlock = 0;
		return true;
	}
	
	/**
	 * 将查看数据的指针指到下一个数据块
	 * @return 是否成功(失败原因:数据块个数为0,指针指到最后一个数据块)
	 */
	public boolean queryToNext(){
		//数据块长度为0
		if(blockLength == 0){
			return false;
		}
		//数据块为空
		if(blockName == null || blockData == null || blockHTMLData == null){
			return false;
		}
		//指针到底了
		if(queryBlock == blockLength - 1){
			return false;
		}
		queryBlock ++;
		return true;
	}
	
	/**
	 * 将查看数据的指针指到某一个数据块
	 * @param blockId 数据块所在位置(从0开始)
	 * @return 是否成功
	 */
	public boolean queryTo(int blockId){
		//数据块为空
		if(blockName == null || blockData == null || blockHTMLData == null){
			return false;
		}
		//位置越界
		if(blockId < 0 || blockId >= blockLength){
			return false;
		}
		queryBlock = blockId;
		return true;
	}
	
	/**
	 * @return 获得当前数据块的类别名
	 */
	public String getBlockName(){
		return blockName[queryBlock];
	}
	
	/**
	 * @return 获得当前数据块的文本数据
	 */
	public String getBlockData(){
		return blockData[queryBlock];
	}
	
	/**
	 * @return 获得当前数据块的HTML数据
	 */
	public String getBlockHTMLData(){
		return blockHTMLData[queryBlock];
	}
	
	/**
	 * @return 判断查询结果是否有错误
	 */
	public boolean haveError(){
		return errorStr!=null;
	}
	
	/**
	 * @return 如果有错误,返回错误信息,否则返回:null
	 */
	public String getError(){
		return errorStr;
	}
}

